package com.cskaoyan.javase.array._4operation._0traverse;

import java.util.Arrays;

/**
 * 数组的遍历除了可以使用for循环外，还可以使用增强for循环。
 * 增强for主要是为了配合集合去使用的
 * (关于增强for会在学习集合时，详细去讲，现在先了解一下基本使用。)
 *
 * 增强for循环（也叫foreach），以遍历并打印数组元素为例，它的语法是：
 * for(数据类型 变量名 : 要遍历的数组或者集合){
 *   System.out.println(变量名);
 * }
 * 语法中的各个部分：
 *      1.数据类型是要遍历数组或集合中元素的数据类型。
 *          比如遍历int数组，就应该填入int。
 *      2.从整个遍历的过程中看来，变量名就表示数组/集合中的某一个元素。
 *          整体就代表所有元素。
 *
 * 增强for vs 普通for
 *      1.增强for循环直接遍历数组中的元素,普通for循环遍历的是数组的下标
 *      2.增强for的优点是:
 *          a.语法更简洁,配合快捷键"iter"使用,非常快捷方便.
 *          b.增强for遍历相比较于普通for效率更佳(多线程)
 *      3.增强for的缺点:
 *          增强for,也叫foreach,它其实就是一种迭代器
 *          它的作用就是单纯为了遍历访问元素的
 *          它绝无可能用于修改元素的取值
 *
 *
 * 综上,何时使用增强for呢?何时使用普通for呢?
 * 在数组的操作中,如果有以下需求:
 *      1.明确需要修改元素取值
 *      2.明确需要数组下标完成功能的
 * 那么就不能使用增强for循环
 * 否者,肯定优先考虑增强for,因为它语法简洁,遍历高效,使用方便.
 *
 * @since 15:50
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo3 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        // 增强for循环直接遍历数组中的元素
        for (int element : arr) {
            // element就直接表示数组容器中的某个元素
            System.out.println(element);
        }

        System.out.println("----------------");
        // 普通for循环遍历的是数组的下标
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        System.out.println("-----------------------");

        // 增强for快捷键iter
        for (int ele : arr) {
            System.out.println(ele);
        }

        System.out.println("-----------------------");

        double[] arr2 = {0.1, 0, 2, 0.3};
        // 普通for循环遍历访问,修改元素都是可行的
        for (int i = 0; i < arr2.length; i++) {
            arr2[i] = 0;
        }
        System.out.println(Arrays.toString(arr2));
        System.out.println("-----------------------");

        String[] arr3 = {"abc", "666"};
        for (String ele : arr3) {
            // 这里修改元素的取值是无法成功的,说明增强for是不能用于修改元素取值的
            ele = "777";
        }
        System.out.println(Arrays.toString(arr3));
    }
}
